<HTML><HEAD>
<!--
    ---------
    Recursion
    ---------
-->

<SCRIPT LANGUAGE="JavaScript"><!-- hide from old browsers

/*
    THE JAVASCRIPT COOKBOOK by Erica Sadun, webrx@mindspring.com
    Copyright (c)1998 by Charles River Media.  All Rights Reserved.
    
    This applet can only be re-used or modifed by license holders of the
    JavaScript Cookbook CD-ROM.  Credit must be given in the source
    code and this copyright notice must be maintained. If you do
    not hold a license to the JavaScript Cookbook, you may NOT
    duplicate or modify this code for your own use.

    Use at your own risk. No warranty is given or implied of the suitability 
    of this applet for any specific application. Neither Erica Sadun nor 
    Charles River Media will be held responsible for any unwanted effects 
    due to the use of this applet or any derivative. 
*/

// Fibonacci Recursion
function xfib(n)
{
    if (n < 0)  // Fib(negative #'s) is not defined
    {
        return 0
    }
    
    // stop recursion if n is 0 or 1.  These are well defined
    // otherwise, solve for n-1 and n-2 and add the results
    if ((n == 0)||(n == 1)) n = 1 
    else n = xfib(n-1) + xfib(n-2)
    return n
}

// input validation
function fib(aform)
{
    var n = aform.number.value
    if (n > 16) 
        alert("Please use a smaller number." +
        "  The Fibonacci sequence is very memory intensive!")
    else {
        aform.number.value="fib("+n+") is "+xfib(n)
        aform.number.select()
    }
}

<!-- done hiding --></SCRIPT></HEAD>

<BODY bgcolor="ffffff" 
onLoad="document.forms[0].number.focus();document.forms[0].number.select();return true">
    
<FONT COLOR="007777"><H1><IMG SRC="../GRAFX/UTENS.JPG" WIDTH=80 HEIGHT=50
ALIGN = CENTER>Fibonacci</H1></FONT>

<BLOCKQUOTE><FONT COLOR="770000">
    JavaScript supports recursive function calls--that is,
    functions which call themselves to solve increasingly
    simpler problems. This
    example shows how to use recursion to create
    Fibonacci numbers. The higher the number, the
    longer it takes to compute--Fibonacci numbers are
    very memory intensive, especially using this recursive
    algorithm.  Be patient with numbers greater than ten.
</FONT>

<FONT SIZE=4><BLOCKQUOTE>

    <FORM NAME="FibForm" onSubmit="fib(forms[0]);return false">
        <INPUT TYPE="text" SIZE="15" NAME="number">
        <INPUT TYPE="button" VALUE="FIB IT" 
            onClick="fib(this.form);this.form.number.select();return true">
    </FORM>

</BLOCKQUOTE></FONT></BLOCKQUOTE>
    
<FONT COLOR="007777"><H2>Discussion</H2></FONT>
<FONT SIZE=4>
    The Fibonacci (<i>fih-boh-nah-chee</i>)
    sequence gives rise to many cheers including
    this favorite:
    <pre><null
    >  One! One! Two! Three! Five! Eight!<br><null
    >  Who do we appreciate?<br><null
    >  Fibonacci! Fibonacci!<br><null
    >  Yaaaaaay! Fibonacci!<br><null
    ></pre>
    The Fibonacci sequence starts off with "one" and "one",
    respectively the zeroth and first numbers of the sequence.
    Each successive number proceeds by adding the two
    previous numbers. The second Fibonacci number
    is two.  The third is three. The fourth is five. The
    fifth is eight.  The sixth is thirteen, and so on.  
</FONT></FONT>

<FONT COLOR="770000"><PRE>
// Fibonacci Recursion
function xfib(n)
{
    if (n < 0)  // Fib(negative #'s) is not defined
    {
        return 0
    }
    
    // stop recursion if n is 0 or 1.  These are well defined
    // otherwise, solve for n-1 and n-2 and add the results
    if ((n == 0)||(n == 1)) n = 1 
    else n = xfib(n-1) + xfib(n-2)
    return n
}
</PRE></FONT>

</FONT></BLOCKQUOTE>

<h5>Copyright &copy;1996 by Charles River Media, All Rights Reserved</h5>
</BODY>
</HTML>